import { ref, onMounted } from 'vue';

export function useToken() {
  const token = ref('');
  const tokenExpired = ref(0);
  const tokenData = ref(null); // 保存完整的token数据

  // 初始化时从本地存储获取token
  onMounted(() => {
    console.log('初始化token...');
    loadToken();
  });

  // 从本地存储加载token
  function loadToken() {
    try {
      console.log('尝试从本地存储加载token...');
      const storedTokenData = uni.getStorageSync('uni_id_token');
      console.log('加载到的token数据:', storedTokenData);
      
      // 更宽松的检查，支持不同格式的token数据
      if (storedTokenData) {
        // 处理对象格式的token数据
        if (typeof storedTokenData === 'object' && storedTokenData.token) {
          token.value = storedTokenData.token;
          tokenExpired.value = storedTokenData.tokenExpired || storedTokenData.expiresIn || 0;
          tokenData.value = storedTokenData;
        } 
        // 处理可能是字符串的情况
        else if (typeof storedTokenData === 'string') {
          token.value = storedTokenData;
          tokenData.value = { token: storedTokenData };
          console.warn('token数据是字符串格式，可能不包含过期时间');
        }
        
        // 检查token是否过期（如果有过期时间）
        if (tokenExpired.value && tokenExpired.value > 0) {
          const now = Date.now();
          console.log(`当前时间: ${now}, token过期时间: ${tokenExpired.value}, 是否过期: ${now > tokenExpired.value}`);
          if (now > tokenExpired.value) {
            console.log('token已过期，清除token');
            clearToken();
          }
        }
        
        console.log(`token加载${token.value ? '成功' : '失败'}`);
      } else {
        console.log('本地存储中没有token数据');
      }
    } catch (error) {
      console.error('加载token失败:', error);
      // 即使出错也尝试清除可能损坏的token
      try {
        uni.removeStorageSync('uni_id_token');
      } catch (e) {
        console.error('清除损坏的token也失败:', e);
      }
    }
  }

  // 保存token到本地存储
  function saveToken(tokenDataParam) {
    try {
      console.log('尝试保存token到本地存储...');
      if (!tokenDataParam) {
        console.error('保存token失败: token数据为空');
        return;
      }
      
      // 确保保存的是对象格式
      const dataToSave = typeof tokenDataParam === 'object' ? tokenDataParam : { token: tokenDataParam };
      uni.setStorageSync('uni_id_token', dataToSave);
      
      // 更新响应式数据
      token.value = dataToSave.token || '';
      tokenExpired.value = dataToSave.tokenExpired || dataToSave.expiresIn || 0;
      tokenData.value = dataToSave;
      
      console.log('token保存成功');
    } catch (error) {
      console.error('保存token失败:', error);
    }
  }

  // 清除token
  function clearToken() {
    try {
      console.log('清除token...');
      uni.removeStorageSync('uni_id_token');
      token.value = '';
      tokenExpired.value = 0;
      tokenData.value = null;
      console.log('token清除成功');
    } catch (error) {
      console.error('清除token失败:', error);
      // 即使出错也重置内存中的token
      token.value = '';
      tokenExpired.value = 0;
      tokenData.value = null;
    }
  }

  // 检查token是否有效
  function isValid() {
    const valid = !!token.value && (tokenExpired.value === 0 || Date.now() < tokenExpired.value);
    console.log(`token有效性检查: ${valid}`);
    return valid;
  }

  return {
    token,
    tokenExpired,
    tokenData,
    loadToken,
    saveToken,
    clearToken,
    isValid
  };
}